/**
 * 
 */
package com.nari.baseinfo.service;

import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.nari.baseinfo.dao.IHeatMeterDao;
import com.nari.baseinfo.model.IHeatMeter;
import com.nari.coreframe.service.IGenericService;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface IHeatMeterService extends IGenericService<IHeatMeter, String> {

	/**
	 * 分页查询热量表数据
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param meterNo 热量表表号(可选)
	 * @param meterType 热表型号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-26
	 */
	public ResultWithPageCond<IHeatMeter> queryHeatMeterPage(String projectUID, String communityUID, 
			String meterNo, String meterType, PageCond pageCond) throws Exception;
	/**
	 * 分页查询热量表数据
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param unitUID 所属单元(可选)
	 * @param meterNo 热量表表号(可选)
	 * @param meterType 热表型号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author zhoubo
	 * @date 2015-12-08
	 */
	public  ResultWithPageCond<IHeatMeter> queryHeatMeterPage(String projectUID, String communityUID,
			String buildingUID, String unitUID, String meterNo, String meterType, PageCond pageCond)
			throws Exception;
	/**
	 * 通过热量表列表查询与之关联的项目ID-项目名称映射表
	 * @param projectList 热量表列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-6
	 */
	public Map<String, String> queryReferProjectsByMeterList(List<IHeatMeter> meterList) throws Exception;
	
	/**
	 * 通过热量表列表查询与之关联的行政机构ID-机构名称映射表
	 * @param projectList 热量表列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-6
	 */
	public Map<String, String> queryReferCitysByMeterList(List<IHeatMeter> meterList) throws Exception;
	
	/**
	 * 通过热量表列表查询与之关联的小区ID-小区名称映射表
	 * @param projectList 热量表列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-6
	 */
	public Map<String, String> queryReferCommunitysByMeterList(List<IHeatMeter> meterList) throws Exception;
	
	/**
	 * 通过热量表列表查询与之关联的楼栋ID-楼栋名称映射表
	 * @param projectList 热量表列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-6
	 */
	public Map<String, String> queryReferBuildingsByMeterList(List<IHeatMeter> meterList) throws Exception;
	
	/**
	 * 带附件上传的热量表信息保存及修改
	 * @param heatMeter 热量表信息实体
	 * @param attachFile 安装图片附件
	 * @param fileName 附件文件名
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-11
	 */
	public ResponseMsg saveOrUpdateHeatMeter(IHeatMeter heatMeter, File attachFile, 
			String fileName) throws Exception;
	
	/**
	 * 删除热量表附件
	 * @param heatMeterUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-11
	 */
	public ResponseMsg deleteMeterPicAttachFile(String heatMeterUID) throws Exception;
	
	/**
	 * 通过热量表唯一标识删除热量表信息，并批次删除对应的热量表附件等
	 * @param heatMeterUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-12
	 */
	public ResponseMsg deleteHeatMeterByUID(String heatMeterUID) throws Exception;
	
	/**
	 * 通过热量表表号查询热量表信息
	 * @param meterNo
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-30
	 */
	public IHeatMeter queryMeterByMeterNo(String meterNo) throws Exception;
	
	/**
	 * 通过热量表所属关系查询热量表列表
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param shareAreaUID 所属分摊域(可选)
	 * @return 若所属关系均不存在，则返回空列表
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-30
	 */
	public List<IHeatMeter> queryMetersByBelongs(String projectUID, String communityUID, 
			String buildingUID, String shareAreaUID) throws Exception;
	
	/**
	 * 通过热量表所属关系统计热量表个数
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param shareAreaUID 所属分摊域(可选)
	 * @return 
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-30
	 */
	public long countMeterNumberByBelongs(String projectUID, String communityUID, 
			String buildingUID, String shareAreaUID) throws Exception;
	
	/**
	 * 根据所属分摊域信息查询热量表信息
	 * @param shareAreaUID 所属分摊域(必选)
	 * 说明：若分摊域ID不存在，则返回零结果集
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param meterNo 热量表表号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResultWithPageCond<IHeatMeter> queryHeatMeterPageByAreaUID(String shareAreaUID, 
			String projectUID, String communityUID, String meterNo, 
			PageCond pageCond) throws Exception;
	
	/**
	 * 查询不隶属于某个分摊域下的热量表列表
	 * @param shareAreaUID 所属分摊域(必选)
	 * 说明：若分摊域ID不存在，则返回零结果集
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param meterNo 热量表表号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResultWithPageCond<IHeatMeter> queryMeterPageExceptAreaUID(String shareAreaUID, 
			String projectUID, String communityUID, String meterNo, 
			PageCond pageCond) throws Exception;
	
	/**
	 * 批量设置热量表所属分摊域信息
	 * @param shareAreaUID 所属分摊域
	 * @param meterIDList 热量表ID列表，格式：XXX,XXX,XXX
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResponseMsg saveHeatMeterArea(String shareAreaUID, String meterIDList) throws Exception;
	
	/**
	 * 批量设置热量表所属分摊域信息
	 * @param shareAreaUID 所属分摊域
	 * @param meterOptions 热量表选项及其设置信息
	 * 	格式(热量表ID:热量表加减关系)：XXX:XXX,XXX:XXX,XXX:XXX
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResponseMsg saveHeatMeterAreaConfig(String shareAreaUID, String meterOptions) throws Exception;
	
	/**
	 * 根据分摊域、热量表计算关系等查询热量表列表
	 * @param shareAreaUID 所属分摊域(必选)
	 * @param calculateType 热量表计算关系(必选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-4
	 */
	public List<IHeatMeter> queryHeatMetersByAreaUID(String shareAreaUID, 
			String calculateType) throws Exception;
	
	/**
	 * 通过热量表所属关系统计热量表的个数
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param shareAreaUID 所属分摊域(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-23
	 */
	public int countMeterSumByBelongs(String projectUID, String communityUID, 
			String buildingUID, String shareAreaUID) throws Exception;
	
	/**
	 * 系统热量表表号唯一性统计
	 * @param meterNo
	 * @param meterUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-5-8
	 */
	public int queryMeterNoUniqueCount(String meterNo, String meterUID) throws Exception;

	public abstract void saveHeatMeter(Collection heatmeters) throws Exception;
}
